package generator;

import java.util.*;

import klient.Klient;

import uslugi.*;
import util.MathUtil;

public class GeneratorSplatKredytow {

	private List<KredytKlienta> kredyty;

	private List<Splata> splaty = new ArrayList<Splata>();

	private long idSplaty = 0;
	
	public GeneratorSplatKredytow(List<KredytKlienta> kredyty) {

		this.kredyty = kredyty;

	}

	public void generujSplaty() {

		// 82% klientow splaca wszystko w terminie
		double procent = 0.82;

		for (KredytKlienta kk : kredyty) {

			if (procent >= MathUtil.nextDouble()) {

				splata(kk,1);

			} else {
				splata(kk, MathUtil.losujInta(2, 4));

			}

		}

	}

	private void splata(KredytKlienta kk, int coIleMsc) {

		int iloscSplat = kk.getKredyt().getMaxiloscMiesiecy();
		
		Calendar dataSplaty = Calendar.getInstance();
		dataSplaty.setTime(kk.getData());
		
	
		for(int i = 0; i < iloscSplat; i++){
			
			
			dataSplaty.add(Calendar.MONTH, coIleMsc);
			
			// jezeli doszlo do Grudnia 2011 to koniec
			if(MathUtil.DATA_KONCOWA.compareTo(dataSplaty) < 0) break;
			
			Splata s = new Splata(++idSplaty, kk, kk.getMscSplata(), new Date(dataSplaty.getTimeInMillis()));
		
			splaty.add(s);
			
		}
				
	}
	
	public List<Splata> dajSplaty(){
		return splaty;
	}
	
	public static void main(String [] args){
		
		List<Klient> klienci = new ArrayList<Klient>();
		for (int i = 0; i < 100000; i++) {
			klienci.add(GeneratorKlientow.generujKlienta());

		}

		GeneratorKredytowKlientow g = new GeneratorKredytowKlientow(klienci,
				new GeneratorKredytow().generujKredyty());

		List<KredytKlienta> test =	g.przypiszKredyty();
		
		GeneratorSplatKredytow gsk = new GeneratorSplatKredytow(g.przypiszKredyty());
		
		gsk.generujSplaty();
		
		List<Splata> splaty = gsk.dajSplaty();
		
		System.out.println("Ilosc wygenerowanych splat= " + splaty.size());
	}

}
